{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f8ba3161",
   "metadata": {},
   "source": [
    "# Interprebility 5: Test symmetries"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6535c1f2",
   "metadata": {},
   "source": [
    "Figuring out the symbolic formula represented by a model is ideal but sometimes too challenging. In this case, we might be content with simply figuring out some modular structures or symmetries. These hypothesis testing is partially inspired by AI Feynman."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1416f4c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from kan.hypothesis import *\n",
    "import torch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ee16e29",
   "metadata": {},
   "source": [
    "Case 1: detect separability.\n",
    "* Additive separability: $f(x_1, x_2, ...) = g_1(x_1,x_2) + g_2(x_3) + g_3(x_4,x_5,x_6) + ...$\n",
    "* Multiplicative separability: $f(x_1, x_2, ...) = g_1(x_1,x_2)g_2(x_3)g_3(x_4,x_5,x_6)...$\n",
    "* General separability: $f(x_1, x_2, x_3, ...) = h(p(x_1,x_2)+q(x_3,\\cdots))$. (Note that general additive separability = general multiplicative separability)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "87f1e596",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "add separability detected\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'hessian': tensor([[0.0000, 0.3147, 0.0000, 0.0000, 0.0000, 0.0000],\n",
       "         [0.3147, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],\n",
       "         [0.0000, 0.0000, 0.0000, 0.3619, 0.0000, 0.0000],\n",
       "         [0.0000, 0.0000, 0.3619, 0.0000, 0.0000, 0.0000],\n",
       "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3358],\n",
       "         [0.0000, 0.0000, 0.0000, 0.0000, 0.3358, 0.0000]]),\n",
       " 'n_groups': 3,\n",
       " 'labels': [2, 2, 1, 1, 0, 0],\n",
       " 'groups': [[4, 5], [2, 3], [0, 1]]}"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f = lambda x: x[:,[0]] * x[:,[1]] + x[:,[2]] * x[:,[3]] + x[:,[4]] * x[:,[5]]\n",
    "x = torch.rand(100,6) * 2 - 1\n",
    "detect_separability(f, x, 'add')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0b63eed4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mul separability detected\n"
     ]
    }
   ],
   "source": [
    "f = lambda x: (x[:,[0]] + x[:,[1]]) * (x[:,[2]] + x[:,[3]]) * (x[:,[4]] + x[:,[5]])\n",
    "x = torch.rand(100,6) * 2 - 1\n",
    "detect_separability(f, x, 'mul');"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3933b0dd",
   "metadata": {},
   "source": [
    "We could also test separability by providing a group partition as an argument."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "96110a32",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(True)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f = lambda x: (x[:,[0]] + x[:,[1]]) * (x[:,[2]] + x[:,[3]]) * (x[:,[4]] + x[:,[5]])\n",
    "x = torch.rand(100,6) * 2 - 1\n",
    "groups = [[0,1],[2,3],[4,5]]\n",
    "test_separability(f, x, groups, 'mul')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e81778e9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(False)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_separability(f, x, [[0,1],[2,4],[3,5]], 'mul')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3c088092",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(False)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f = lambda x: torch.sin((x[:,[0]] + x[:,[1]]) * (x[:,[2]] + x[:,[3]]) * (x[:,[4]] + x[:,[5]]))\n",
    "x = torch.rand(100,6) * 2 - 1\n",
    "test_separability(f, x, [[0,1],[2,3],[4,5]], 'mul')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b42e3b47",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(True)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_general_separability(f, x, [[0,1],[2,3],[4,5]])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fbe1d482",
   "metadata": {},
   "source": [
    "Case 2: test symmetry.\n",
    "* Symmetry means the output $y$ is only dependent on a scalar function of a few variables, but otherwise does not gain more infomration from knowing the individual values of these variables. \n",
    "* For example, we say a function has a symmetry $h(x_1, x_2)$ if $f(x_1,x_2,x_3,\\cdots)= g(h(x_1, x_2), x_3,\\cdots)$.\n",
    "* To hypothesis test $h$, use test_symmetry_var"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "29640f8f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0,1]: tensor(True)\n",
      "[0,2]: tensor(False)\n",
      "[2,3]: tensor(True)\n"
     ]
    }
   ],
   "source": [
    "f = lambda x: (x[:,[0]] + x[:,[1]]) * (x[:,[2]] + x[:,[3]]) * (x[:,[4]] + x[:,[5]])\n",
    "x = torch.rand(100,6) * 2 - 1\n",
    "print('[0,1]:', test_symmetry(f, x, [0,1]))\n",
    "print('[0,2]:', test_symmetry(f, x, [0,2]))\n",
    "print('[2,3]:', test_symmetry(f, x, [2,3]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a392089f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100.0% data have more than 0.9 cosine similarity\n",
      "suggesting symmetry\n"
     ]
    }
   ],
   "source": [
    "from sympy import *\n",
    "\n",
    "# the function is only dependent on b/c, but not on the individual values of b and c.\n",
    "f = lambda x: x[:,[0]] * torch.sqrt(1 + (x[:,[1]]/x[:,[2]])**2)\n",
    "input_vars = a, b, c = symbols('a b c')\n",
    "symmetry_var = b/c\n",
    "x = torch.rand(100,3) * 2 - 1\n",
    "test_symmetry_var(f, x, input_vars, symmetry_var);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b8212789",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20.0% data have more than 0.9 cosine similarity\n",
      "not suggesting symmetry\n"
     ]
    }
   ],
   "source": [
    "not_symmetry_var = b * c\n",
    "test_symmetry_var(f, x, input_vars, not_symmetry_var);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c782f62",
   "metadata": {},
   "source": [
    "Case 3: Plot tree graph. By applying the hypothesis testing above iteratively, we are able to figure out the tree graph. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "42003070",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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c4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcYAADAc4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcYAADAc4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcYAADAc4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcYAADAc4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcYAADAc4QBAAA8RxgAAMBzhAEAADxHGAAAwHOEAQAAPEcY2Is33ii5/eabwdWB+KDffqHffqHf+0YY2IudXzw730Zyot9+od9+od/7FnHOuaCLCJsff5Tq1XPKz98iSapQoaKWL4+oRo2AC0NM0G+/0G+/0O/9w5GBPZg4UcrPj6h58yw1b56lvLyIJk4MuirECv32C/32C/3ePxwZ+I01a6R69aQtW6RXXpGck849V6pYUVq+XKpWLegKEU302y/02y/0e/9xZOA37rrLXjjNmknt2knt20vHH2/b7r476OoQbfTbL/TbL/R7/3FkYCdr11qKzM2VZs2SOnWy7bNmSZ07S9nZ0ooVUtWqQVaJaKHffqHffqHfpcORgZ3cc4+9cJo2lTp2LNneqZNty821n0FyoN9+od9+od+lw5GB/7NunaXIjRulmTOl88/f9fszZ0oXXCBVrmxp8sADg6gS0UK//UK//UK/S48jA//nvvvshXPMMXYI6be6dJGaNLGfue++uJeHKKPffqHffqHfpceRAUkbNliKXL9eevppqXv3Pf/c009LPXtailyxwlIlEg/99gv99gv9LhuODEj6+9/thXPUUVLXrnv/uQsukBo3tp/9+9/jVR2ijX77hX77hX6XjfdHBjZtshT566/SE09IF174+z//xBPSxRfbGajLl0uVKsWjSkQL/fYL/fYL/S47748MPPigvXCOOELq0WPfP9+jh9Swof3OpEmxrw/RRb/9Qr/9Qr/LzuswsHmzdixLeeONUmrqvn8nLc1+VpLuvNMWr0BioN9+od9+od/l43UYmDzZlqusX3/fh5N2dtFF0uGH2+9Onhy7+hBd9Nsv9Nsv9Lt8vA0DW7dKEybY7b/9TUpP3//fTU+335HsPrZujX59iC767Rf67Rf6XX7ehoFHHpF++knKyZEuuaT0v//nP0t169rlMR99NPr1Ibrot1/ot1/od/l5GQby8qTx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BB4GnHPugQce2PEEVq9efb9e8MU7i0MOOWTH7UQKA86Vftw33HCDk+QaNGjg+vTp44YNG+a6du3qUlNTXUpKinv66afjVHn5lHbcS5cudVlZWa5NmzZu4MCBbvjw4a5v376uevXqTpLr379/nCovn7K8znf22WefuczMTJeVlZUwYcC5ss/vKlWquJEjR+7276WXXopD1eVXlnEXFRW5AQMG7JjnV1xxhbvhhhvcJZdc4urWrevmzZsXh8rLp7TjXrBgwR77PHLkSNekSRMnyY0fPz5O1ZddWfp93XXXOUmuVq1abtCgQW7o0KGubdu2LhKJuEqVKrnFixfHoXITeBj46quv3CGHHLLjSczKynI//fTTPn/vjTfecMuXL3fOOTdu3LiECwNlGffMmTPd3Llzd9s+d+5cl56e7qpWrRr6Q1JlGXdBQYHbvn37bts3btzojj76aCfJLVmyJFYlR0VZX+fFCgoK3IknnuiaN2/uLr744oQJA2Udd05OjsvJyYl9gTFS1nHfe++9TpL7y1/+4goKCnb7/p7mQZiU93W+s/z8fHfwwQe7tLQ09+OPP0a50ugqy7h/+OEHl5KS4urVq+c2bNiwy/fuvvtuJ8lddtllsSx7F4GGgZ9++snVr1/fSXIHH3zwjify6quvLtX9JFoYiNa4d3b22Wc7Se6///1vFCuNrliMu/ijOy+88EIUK42uaIx7zJgxLiMjwy1ZssRdeumlCREGyjPuRA4DZR33li1bXNWqVV39+vVD/z/9PYn2/C5+H75z585RrjS6yjruDz74wElyF1100W7f++qrr5wk16FDh1iVvZvAwkBubq474YQTnCSXnZ3tPv74Y9e5c2cnyWVmZroVK1bs930lUhiI5rh31qFDByfJLViwILoFR0ksxr1161bXtGlTF4lE3FdffRWDqssvGuNevHixy8jIcKNHj3bOuYQIA+Udd05OjqtZs6abNm2aGzNmjHvwwQfdwoUL41R92ZVn3LNmzXKS3HXXXefy8vLczJkz3bhx49ykSZPc0qVL4ziK0ovF/D7rrLOcJPfyyy/HoOLoKM+4f/nlF5eRkeHq1avnNm7cuMv3ij+WOHHixFgPYYdAwsD27dtdu3btnCSXlpbmXn31Veecc4sWLXKRSMRJcn369Nnv+0uUMBDtcRdbsWKFy8zMdDVr1tzjocWgRWvc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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = lambda x: ((x[:,[0]]**2 + x[:,[1]]**2) ** 2 + (x[:,[2]]**2 + x[:,[3]]**2) ** 2) ** 2 + ((x[:,[4]]**2 + x[:,[5]]**2) ** 2 + (x[:,[6]]**2 + x[:,[7]]**2) ** 2) ** 2\n",
    "x = torch.rand(100,8) * 2 - 1\n",
    "plot_tree(f, x, style='tree') # by default, style = 'tree'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8104aede",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAkNklEQVR4nO3de3DU1f3/8dduLhuzS6UQkoBAGESMoCKl4GWoxRsqWosaKAoVkFutQ0VRRCyTKa3DgPU2tmoFqwMq1UK9IFJEWkbwgjdgCGUgWC7aaCCKYhLDbd+/P/xlv8FELsnZ7G7O8zGTmeWznz0577z3LK98Pp/dBMzMBAAAvBVM9AQAAEBiEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwXHqiJwAgccxM1dXVkqTs7GwFAoEEzwhAInBkAPBYdXW1IpGIIpFILBQA8A9hAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPBcuusBo9GoKioqJEnZ2dkKBAKuvwUAR6qqqhq8DSD5mJmqq6slSTk5OQoG3f0+HzAzczaapF27dikvL8/lkAAAoI7y8nLl5uY6G4/TBAAAeM75aYLs7OzY7fLycoXDYdffAoAjdQ87cloPSG5VVVWxI+91/691wXkYqPtiEg6HCQNAkotEIomeAoDj5Dq4c5oAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAaCHWrFmjQCCgQCCgmTNnNmqMAQMGKBAIaPv27cf8mFGjRikQCGjlypWN+p4AEo8wALQQ8+fPb/A2ABwNYQBoAQ4cOKDnnntOgUBA+fn52rRpkz788MNETwtAiiAMAC3A0qVLVVFRofPPP1/jx4+XxNEBAMeOMAC0ALX/8Y8YMUIjRoyQJC1YsECHDh1qcP/HH39cZ5xxhrKysnTSSSdp4sSJ+uqrr474PRYtWqR+/frphBNOUF5enm644QaVlZW5LQRAQqQnegIAmuarr77SK6+8olAopKKiIrVu3Vr9+vXTu+++q+XLl+uyyy47bP/bb79d9913n0KhkC688EJlZ2frmWee0ZtvvqlQKNTg9/jTn/6kiRMnKi0tTT/96U+Vk5Oj119/Xeecc4569erVHGUCiCOODAAp7vnnn1dNTY2uvPJKtW7dWpJiRweefvrpw/Z96623dN9996lNmzb64IMP9Oqrr2rhwoUqLS3VoUOH9M4779Qbf/v27br99tsVCoX0+uuva8WKFXruuee0detWFRYW6pVXXol7jQDiizAApLi6pwhqDRs2TOnp6XrhhRdUWVkZ2/7YY49JkiZPnqyePXvGtrdt21b33ntvg+P/9a9/1b59+3TDDTdowIABse3Z2dl6+OGHFQgEXJYDIAEIA0AK2759u1avXq02bdpo0KBBse3t2rXTpZdequrqar3wwgux7atXr5YkDR06tN5YAwcOVJs2beptP9JjTj31VPXu3bvJdQBILMIAkMKefvppmZmGDh2qzMzMw+6rPVJQ910FZWVlCgQC6tSpU4Pjde7cud622osEG7rvSNsBpA4uIARSWO01AStWrFD//v0Pu2/fvn2x+z799FO1b9++Ud/DzCSJ0wFAC8aRASBFvfvuu9q8ebMkqbS0VG+++eZhX++//74kKRqN6tlnn5UktW/fXmamjz/+uMExd+7cWW9bhw4dJEk7duw45scASC2EASBF1R7+v+OOO2RmDX699tprkv7vCELt0YO///3v9cZbvny5vvjii3rbj/SYLVu2aN26dU7qAZA4hAEgBR08eFDPPfecJOm666773v0uvPBC5ebmat26dSopKdGECRMkSffff782bdoU2++LL77QlClTGhxj9OjRyszM1Lx587Rq1arY9m+++Ua33HKLotGoi5IAJBBhAEhBS5cu1e7du496NX9a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evToYZKspKQkXlN2orHP81oHDx60vn37Wr9+/WzEiBEpEwYaW3dBQYEVFBTEf4Jx0ti6H3roIZNkN998sx08eLDe/Q2tg2TS1Od5Xfv27bO2bdtaenq6ffbZZ45n6lZj6v70008tGAxaly5d7KuvvjrsvgceeMAk2ejRo+M57cMkNAyUl5db165dTZK1bds29oP8zW9+c1zjpFoYcFV3XQMHDjRJ9t577zmcqVvxqLv2rTsvvviiw5m65aLue+65xzIzM62kpMRGjhyZEmGgKXWnchhobN3V1dXWpk0b69q1a9L/p98Q1+u79jz84MGDHc/UrcbW/fbbb5skGz58eL37tmzZYpLsiiuuiNe060lYGKisrLQf//jHJskikYh98MEHNnjwYJNkoVDIduzYccxjpVIYcFl3XVdccYVJsrVr17qdsCPxqPubb76xXr16WSAQsC1btsRh1k3nou4NGzZYZmamzZgxw8wsJcJAU+suKCiw/Px8e+qpp+yee+6xRx55xNatW9dMs2+8ptT90ksvmSS77bbbrKamxhYtWmQzZ860Rx991EpLS5uxiuMXj/V9ySWXmCR75ZVX4jBjN5pSd0VFhWVmZlqXLl1s7969h91X+7bE++67L94lxCQkDBw4cMAuv/xyk2Tp6en26quvmpnZ+vXrLRAImCS78cYbj3m8VAkDruuutWPHDguFQpafn9/gocVEc1X3nj17rLi42KZPn24TJkywTp06mSQrLi6OcwWN46LuAwcOWJ8+faxXr162f/9+M0v+MOCi7u+7gPCyyy6z3bt3N0cZx62pdU+fPt0k2ZQpU+zUU089rO5gMGiTJ09urlKOSzxe17Zv327BYNBOOumkpHxNM3NT97333muS7KSTTrKbbrrJpkyZYpdffrllZGTY+PHjY2u+OSQkDIwZMyb2JJ8zZ85h99V+dGNaWppt3rz5mMZLlTDgum4zs/3799v5559vkmzevHmup+yEq7q3bdt22AtkRkaG3XvvvUn7bgIXdf/ud7+z9PR0++CDD2Lbkj0MuKp75cqVtnv3btu7d6+98847sRfec889Nyl73tS6J0yYENunb9++9u6779rXX39tb7zxhhUWFpoke+SRR5qjlOMSj9e14uJik2S//e1vXU/XGVd1P/PMMxaJRA57bTvvvPMavD4snpo9DNQ2WZJNnz693v0lJSWxD2sYOnToMY2ZCmEgHnUfOnQodjFZsl5RH4+6Dx48aNu2bbOZM2daZmamXX311Ul3jtVF3evWrbOMjAybOnXqYduTOQzEo9+1Dh06ZP3790/KQ8cu6h43bpxJshNOOMH+97//Nfj4k08+OS7zb6x4va517tzZAoGA/fe//3U9ZSdc1f373//eMjIy7J577rGPP/7YKisrbfXq1davXz9LS0uzRYsWxbOMwzRrGKj7sY0jR4783v2GDRtm0rd/2OFYzoEnexiIR93RaNRuvPFGk2QjRoxIyk+4ile/65o9e3bS/cbkqu5evXpZYWFhvXeIJGsYaI5+P/HEEybJ7rrrrqZN1iFXdd9+++0myX7yk580+Phu3bqZpOP+bIp4iVe///nPf5oku+iii9xN1iFXda9YscIk2a233lrvvl27dlkkErHOnTs7nPmRNVsYWLJkiaWnp5sku/jii494LmTTpk2WlpZmkmzQoEFHHTuZw0A86j506JCNHj3aJNl1112XlOfU4tnvutatW9eo3zLjxWXdDZ0zb+jrhRdeiGNFx6a5+l17kd0tt9zSxBm74bLuOXPmmCT72c9+1uDjay9UKysrczb/xopnv4cMGWKSkvIv/Lmsu/YzBl5++eUGH3/uueeapGa7RiZdzWTQoEHf+/eev6uwsFAHDx6M84yah+u6o9Goxo4dqyeffFK/+MUvNH/+fKWlpbmYqlPN1e+ysjJJUnp6sz2Vj8hl3WPGjGlw+xtvvKHS0lJdddVVateunbp06dKYqTrVXP1es2aNJCVFzZLbui+44AJJ0qZNm+rdd+DAAW3dulXhcFjt2rVr3GQdile/P//8c7300ktq06aNrr766qZMMS5c1r1//35J0u7duxu8v3Z7KBQ6zlk2UrNEjjhL5iMDLh06dMhGjRpl0rd//CLZzpPHy9q1a+3LL7+st/3zzz+PfQTo/PnzEzCzxEjW0wSubNy4scFD4atWrbKsrKwmvQU32dV+Xsh3L0ibMWNG7JRgS1b7YTtN+eyRVLFgwQKTvv3Y4u++vj311FMmyfr06dNs80mOX6caYe7cuVq9erUkacOGDbFtK1eulCQNHjxYgwcPTtDs4mPGjBl66qmnFIlE1L17d/3hD3+ot8/gwYN11llnNf/k4uipp57S3LlzdcEFF6igoEDhcFg7duzQkiVLVFlZqWuvvVbXX399oqcJR55//nnNnj1bF110kbp06aJQKKSSkhK99tprCgaDeuyxx9S5c+dETzMuHnnkEZ133nkaN26cXnzxRRUWFmrt2rX617/+pYKCAt17772JnmJcPfHEE5KksWPHJngm8TdkyBD95S9/0cqVK3XKKafoqquu0g9/+EOtX79ey5cvVygU0oMPPth8E2q22OFY7W9H3/eVrO89b4qj1awWenRk1apVNmrUKCssLLQf/OAHlp6ebrm5uXbZZZfZs88+m5RvM4unln5kYOXKlTZ06FDr1q2btWrVyjIyMqxjx442bNgwW7NmTaKnF3c7d+60UaNGWX5+vmVkZFinTp3s5ptvbvTH+qaKNWvWmCTr169foqfSbGpqamzWrFn2ox/9yLKzsy09Pd1OOukku/7665v17xKYmQXMzJovegAAgGQTTPQEAABAYhEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8BxhAAAAzxEGAADwHGEAAADPEQYAAPAcYQAAAM8RBgAA8Nz/A0Rn2hxPEaP7AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_tree(f, x, style='box')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a2136344",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = lambda x: ((x[:,[0]]**2 + x[:,[1]]**2) ** 2 + (x[:,[2]]**2 + x[:,[3]]**2) ** 2) ** 2 + x[:,[4]]**2\n",
    "x = torch.rand(100,5) * 2 - 1\n",
    "plot_tree(f, x, style='tree') # by default, style = 'tree'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8b0c7563",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjKUlEQVR4nO3df3AU9f3H8dfm1+FdGBkICaD8qFL5ZQWaFqmlGqhFSGmH0oAolAQRHafjACMygDJUpv0yYEUtVi1QfgSVgjBU+TUKFIQgyCCGEcpAUBKK0UDEqrmQQLjP9w/JNTFBINztXvJ5PmYyc7O3e/vevPdz97rdvTvHGGMEAACsFed1AQAAwFuEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACyX4HUBALxjjFF5ebkkye/3y3EcjysC4AWODAAWKy8vV3JyspKTk8OhAIB9CAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5RLcXmEoFFJpaakkye/3y3Ect0sAcFEwGKz3NgD3GWNUXl4uSUpJSVFcnHvv1x1jjHFtbZJOnTqltLQ0N1cJAECjUlJSotTUVNfWx2kCAAAs5/ppAr/fH75dUlKiQCDgdgkALqp5WJLTdoC3gsFg+Mh5zddKN7geBmo+2QQCAcIA4LHk5GSvSwDwLW4Hc04TAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAE3Ee++9J8dx5DiOZs+e3aDHyMjIkOM4KiwsvOJlcnJy5DiOtm/f3qB1AvAeYQBoIpYvX17vbQC4HMIA0AScP39eK1eulOM4atOmjQ4fPqz9+/d7XRaARoIwADQBmzZtUmlpqe6880499NBDkjg6AODKEQaAJqD6hX/06NEaPXq0JGnFihW6cOFCvfMvWLBAP/jBD9SsWTPdcMMNevTRR/Xll19+5zrWrFmjPn366LrrrlNaWprGjBmj4uLiyG4IAE8keF0AgGvz5Zdfav369fL5fMrKylKLFi3Up08f7d27V5s3b9agQYNqzT958mQ988wz8vl8GjBggPx+v1599VXt2rVLPp+v3nW88MILevTRRxUfH6+77rpLKSkp2rJli/r27auePXu6sZkAoogjA0Ajt2rVKlVUVGjIkCFq0aKFJIWPDrzyyiu15n333Xf1zDPPqGXLlnr//fe1ceNGrV69WgUFBbpw4YL27NlT5/ELCws1efJk+Xw+bdmyRVu3btXKlSt17Ngxde3aVevXr4/6NgKILsIA0MjVPEVQbeTIkUpISNDatWtVVlYWnv7yyy9Lkh577DH16NEjPL1Vq1Z6+umn6338xYsXq7KyUmPGjFFGRkZ4ut/v1/z58+U4TiQ3B4AHCANAI1ZYWKi8vDy1bNlSmZmZ4emtW7fWPffco/Lycq1duzY8PS8vT5I0YsSIOo81cOBAtWzZss7071qmS5cu6t279zVvBwBvEQaARuyVV16RMUYjRoxQUlJSrfuqjxTU/FRBcXGxHMdR+/bt6328Dh061JlWfZFgffd913QAjQcXEAKNWPU1AVu3blW/fv1q3VdZWRm+79NPP1Xbtm0btA5jjCRxOgBowjgyADRSe/fu1ZEjRyRJBQUF2rVrV62/ffv2SZJCoZBee+01SVLbtm1ljNF//vOfeh/zxIkTdaa1a9dOklRUVHTFywBoXAgDQCNVffj/8ccflzGm3r+3335b0v+OIFQfPXj99dfrPN7mzZt15syZOtO/a5mjR48qPz8/ItsDwDuEAaARqqqq0sqVKyVJ99133yXnGzBggFJTU5Wfn6+DBw/q4YcfliTNmzdPhw8fDs935swZTZkypd7HGDt2rJKSkpSbm6udO3eGp589e1YTJkxQKBSKxCYB8BBhAGiENm3apNOnT1/2av74+HhlZWVJ+uboQL9+/TRx4kSVlpaqd+/eGjJkiIYPH67vf//7kqS+ffvWeYybbrpJc+bMUUVFhfr376+7775bI0eOVOfOnXXw4EENGTIkOhsJwDWEAaARqj5FMHLkyMvOW33k4NVXX1UoFNK8efP00ksvqXPnztq8ebN27dqlESNGaNu2bZf8BsKJEydq1apV6tWrl/Ly8rR161ZlZGRoz549atWqVeQ2DIAnHFN9qbBLgsGgkpOTJUllZWUKBAJurh4AgJjk5esjRwYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwXILbKzTGhG8Hg0G3Vw9EhDFG5eXlkiS/3y/HcTyuCECkeDW+a74m1nytdIPrYaD6HyxJaWlpbq8eAICYV15eruTkZNfWx2kCAAAs5xiXj0WEQiGVlpZK4vAqGq9gMBg+slVSUqJAIOBxRQAixavxXfP0REpKiuLi3Hu/7vppgri4OKWmprq9WiBqAoEAYQBootwe326eGqiJ0wQAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFiOMAAAgOUIAwAAWI4wAACA5QgDAABYjjAAAIDlCAMAAFguwe0VhkIhlZaWSpL8fr8cx3G7BOCaBYPBem8DjY0xRuXl5ZKklJQUxcXF1ntEL14zvBrfXvbCMcYY19Ym6dSpU0pLS3NzlQCAK1BSUqLU1FSvy6jF1tcMt3sRWxEQAAC4zvXTBH6/P3y7pKREgUDA7RKAa1bzcB6nu9CYBYPB8Dvvms/PscKL1wyvxreXvXA9DNT8pwYCAcIAGq3k5GSvSwAiKhZDrVevGV6Pb7d7wWkCAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBAAAsRxgAAMByhAEAACxHGAAAwHKEAQAALEcYAADAcoQBoB7l5eWaP3++Bg4cqLZt2yopKUnNmzdX9+7dNXbsWK1bt06hUKjOcps3b9bQoUPVpk0bJSUlqVWrVurevbtGjRqlhQsX6ty5cx5sDYBLcRxHjuNc1TI5OTlyHEfbt2+PTlEeSPC6ACDW7N69W1lZWSouLlazZs3Up08ftWvXThUVFSooKNDSpUu1dOlS3XbbbTpw4EB4uZkzZ2rWrFmSpFtvvVU//elPFR8fryNHjmjFihV67bXX9Ktf/Upt2rTxatMAoF6EAaCG/Px8DRgwQJWVlZo6daqmT5+u5s2b15qnsLBQ8+bN05IlS8LT9u3bp1mzZikpKUlr165VZmZmrWU++eQTLVy4UD6fz5XtAICrQRgALjLGaPTo0aqoqNDs2bM1derUeufr1KmT/vKXvyg7Ozs8be3atZKkESNG1AkCknTDDTfoD3/4Q1TqBoBrxTUDwEUbN27UoUOH1LFjR02ZMuWy86enp4dvnz59WpLUunXrqNUHwF1r1qxRnz59dN111yktLU1jxoxRcXGx12VFBWEAuGjTpk2SpKysLMXFXd3QuPHGGyV98+RRHQwANF4vvPCCsrKytH//ft1xxx3KyMjQli1b1LdvX33++edelxdxhAHgouqLAXv37n3Vy44aNUrNmjXTiRMn1LlzZ2VnZ2vRokU6dOiQjDGRLhVAFBUWFmry5Mny+XzasmWLtm7dqpUrV+rYsWPq2rWr1q9f73WJEcc1A8BFpaWlkqSUlJR678/Jyakz7ZFHHtHtt9+um2++WW+88YbGjh2r4uJi5ebmKjc3V5KUmpqq7OxsTZ8+XS1atIhW+QAiZPHixaqsrNT48eOVkZERnu73+zV//nx169atyYV8wgBwUfXgvtRnjpctW1Zn2qBBg3T77bdLkgYOHKiPP/5Yb775pjZv3qz33ntPBw8e1KlTp/T0009r7dq1evfdd7muAIhxeXl5kr65IPjbunTpot69e2v//v1ulxVVnCYALqo+IlB9hODbjDHhv5qfJKjJ5/Np+PDhWrBggQ4cOKDPPvtMc+fOld/v17FjxzR9+vSo1Q8gMqovEuzQoUO9919qemNGGAAu6tmzpyRFNPG3bt1ajz/+uObMmSNJ2rBhQ8QeG0B0XO4oYVNEGAAuGjx4sCRp9erV9X7V8LWoPu94qaMOAGJHu3btJElFRUX13n/ixAk3y3EFYQC4KDMzU926dVNRUVH4nfyVutzFRB999JGk/z3JAIhd/fr1kyS9/vrrde47evSo8vPzXa4o+ggDwEVxcXFavny5fD6fnnjiCU2bNk1ff/11nfmKiop09OjRWtNmzJihKVOm6Pjx43XmLygo0GOPPSZJGjZsWHSKBxAxY8eOVVJSknJzc7Vz587w9LNnz2rChAkRP3IYCxzj8ucjgsGgkpOTJUllZWUKBAJurh64rLy8PGVlZamkpKTWDxWdPXtWJ0+e1AcffKBQKKQePXpo9erV6tq1qyZOnKjnn39ejuOoS5cu6tatmxITE3XixAnt3btXoVBI6enp2rp1q66//nqvNxEIi/Xn5GjXV31dwLdfCp977jlNmjRJ8fHxysjIUEpKinbu3Km4uDj16tVL69ev17Zt22p99PBaedkLPloIfEu/fv300UcfaeHChVq3bp0OHjyo3bt3y+fz6cYbb9SoUaM0fPhwZWZmKj4+XpL05JNPKj09XW+99ZYOHDigd955R1999ZVatGihu+66S1lZWXrwwQeVlJTk8dYBuBITJ07UDTfcoDlz5igvL0/NmzfXwIEDNXfuXD3xxBNelxdxHBkAAIvF+nNyrNcXSV5uK9cMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYLkEt1dojAnfDgaDbq++UTPGqLy8XJLk9/vlOI7HFQGxgbHRcDWfh2s+P8cKL14zvNqfvOyF62Gg+h8sSWlpaW6vHgBwCeXl5UpOTva6jFpsfc1wuxecJgAAwHKOcflYRCgUUmlpqSQO512tYDAYTsYlJSUKBAIeVwTEBsZGw9U8JJ6SkqK4uNh6j+jFa4ZX+5OXvXD9NEFcXJxSU1PdXm2TEwgEeMID6sHYuHqxdmqgJq9fM9zen7zqRWxFQAAA4DrCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYDnCAAAAliMMAABgOcIAAACWIwwAAGA5wgAAAJYjDAAAYLkEt1cYCoVUWloqSfL7/XIcx+0SGq1gMFjvbVwZY4zKy8slSSkpKYqLi50szLi4NoyNhovlcSF5Mza82p+87IVjjDGurU3SqVOnlJaW5uYqgTpKSkqUmprqdRlhjAvEglgbF5K9Y8PtXsRWBAQAAK5z/TSB3+8P3y4pKVEgEHC7hEar5iEkDiVfvWAwGH6HUXM/jAWMi2vD2Gi4WB4Xkjdjw6v9ycteuB4Gav5TA4EAT3pXKTk52esSmoRYe7FgXFw7xsa1i7VxIXk3Nrzen9zuBacJAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGAACwHGEAAADLEQYAALAcYQAAAMsRBgAAsBxhAAAAyxEGYkh5ebnmz5+vgQMHqm3btkpKSlLz5s3VvXt3jR07VuvWrVMoFKqz3ObNmzV06FC1adNGSUlJatWqlbp3765Ro0Zp4cKFOnfunAdbA0QG4wLR5DiOHMe5qmVycnLkOI62b98enaI84BhjjJsrDAaDSk5OliSVlZUpEAi4ufqYtXv3bmVlZam4uFjNmjVTnz591K5dO1VUVKigoECHDh2SJN122206cOBAeLmZM2dq1qxZkqRbb71Vt9xyi+Lj43XkyBF9+OGHMsbo008/VZs2bTzZrlgSy/teLNfmJcZF9MX6vhft+qqDwNW8FObk5GjZsmXatm2bMjIyIlaLl71IcG1NuKT8/HwNGDBAlZWVmjp1qqZPn67mzZvXmqewsFDz5s3TkiVLwtP27dunWbNmKSkpSWvXrlVmZmatZT755BMtXLhQPp/Ple0AIolxAbjIuKysrMxIMpJMWVmZ26uPOaFQyPTo0cNIMrNnz77s/Pv27Qvfnj59upFkRo8eHc0Sm4xY3vdiuTYvMC7cE+v7XrTrq37sq5GdnW0kmW3btkW0Fi97wTUDHtu4caMOHTqkjh07asqUKZedPz09PXz79OnTkqTWrVtHrT7AC4wLxII1a9aoT58+uu6665SWlqYxY8aouLjY67KigjDgsU2bNkmSsrKyFBd3de248cYbJX2zw1Y/AQJNAeMCXnvhhReUlZWl/fv364477lBGRoa2bNmivn376vPPP/e6vIgjDHis+qKn3r17X/Wyo0aNUrNmzXTixAl17txZ2dnZWrRokQ4dOnRVF8MAsYZxAS8VFhZq8uTJ8vl82rJli7Zu3aqVK1fq2LFj6tq1q9avX+91iRHHBYQeKy0tlSSlpKTUe39OTk6daY888ohuv/123XzzzXrjjTc0duxYFRcXKzc3V7m5uZKk1NRUZWdna/r06WrRokW0ygeignEBLy1evFiVlZUaP358rU8L+P1+zZ8/X926dWt6wdLVKxRM7F+s4rYuXboYSeatt96q9/7q/1XNvxUrVtSap6KiwqxatcqMHz/e3HbbbSYuLi48b+fOnc2pU6fc2JSYF8v7XizX5gXGhXtifd/z4gLC/v37G0lm8+bN9S7zwx/+kAsIEVnV73yq3wl9mzEm/JednV3vPD6fT8OHD9eCBQt04MABffbZZ5o7d678fr+OHTum6dOnR61+IBoYF/BS9UWCHTp0qPf+S01vzAgDHuvZs6ckaf/+/RF7zNatW+vxxx/XnDlzJEkbNmyI2GMDbmBcwEvm4imAq/1mwsaMMOCxwYMHS5JWr15d71eqXovqc12XencFxCrGBbzUrl07SVJRUVG99584ccLNclxBGPBYZmamunXrpqKiovA7litlLnMBy0cffSTpfzs20FgwLuClfv36SZJef/31OvcdPXpU+fn5LlcUfYQBj8XFxWn58uXy+Xx64oknNG3aNH399dd15isqKtLRo0drTZsxY4amTJmi48eP15m/oKBAjz32mCRp2LBh0SkeiBLGBbw0duxYJSUlKTc3Vzt37gxPP3v2rCZMmBDxo1WxgB8qihF5eXnKyspSSUlJrR9kOXv2rE6ePKkPPvhAoVBIPXr00OrVq9W1a1dNnDhRzz//vBzHUZcuXdStWzclJibqxIkT2rt3r0KhkNLT07V161Zdf/31Xm+i52J534vl2rzEuIi+WN/3vPqhoueee06TJk1SfHy8MjIylJKSop07dyouLk69evXS+vXrm9QPFfHRwhhSVlZmnn32WTNgwACTmppqEhMTTXJysunatav53e9+Z958801TVVUVnv/0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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_tree(f, x, style='box')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1333bed5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
